/*
 * Título: gestHora. Aplicación web de gestión de horarios para conservatorios.
 * Alumnos:
 * - Javier Pardo Muñoz. I.T. Informática de Gestión
 * - Antonio Prior Cazorla. I.T. Informática de Gestión
 * Director: Dr. José Raúl Romero Salguero.
 *     
 *  Copyright (C) 2013 Javier Pardo Muñoz / Antonio Prior Cazorla
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.

 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package es.uco.gesthora.business.gestorEmail;

import es.uco.gesthora.data.gestorPropiedades.GestorPropiedades;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * Maneja la capa lógica de todo lo relacionado con la gestión de correos
 * electrónicos
 *
 * @author Javier Pardo Muñoz / Antonio Prior Cazorla
 */
public class GestorEmail {

    Properties prop = null;
    GestorPropiedades datosConexion = null;

    /**
     * Constructor
     *
     * @param path: ruta del archivo properties
     * @param ficheroPropiedades: nombre del archivo properties
     */
    public GestorEmail(String path, String ficheroPropiedades) {

        datosConexion = new GestorPropiedades(path, ficheroPropiedades);
        prop = new Properties();

        prop.setProperty("mail.smtp.host", datosConexion.getPropiedad("servidor"));
        prop.setProperty("mail.smtp.starttls.enable", datosConexion.getPropiedad("ssl"));
        prop.setProperty("mail.smtp.port", datosConexion.getPropiedad("puerto"));
        prop.setProperty("mail.smtp.user", datosConexion.getPropiedad("usuario"));
        prop.setProperty("mail.smtp.auth", datosConexion.getPropiedad("auth"));

    }

    /**
     * Envia un email usando JavaMail con los parámetros recibidos
     *
     * @param receptor: dirección del receptor
     * @param asunto: asunto del email
     * @param cuerpo: texto del email
     * @throws AddressException
     * @throws MessagingException
     */
    public void enviarEmail(String receptor, String asunto, String cuerpo) throws AddressException, MessagingException {

        Session sesion = Session.getDefaultInstance(prop);
        //sesion.setDebug(true);
        MimeMessage email = new MimeMessage(sesion);

        try {

            email.setFrom(new InternetAddress(datosConexion.getPropiedad("usuario")));

            email.addRecipient(Message.RecipientType.TO, new InternetAddress(receptor));

            email.setSubject(asunto);

            email.setText(cuerpo + "\n");
            Transport t = sesion.getTransport("smtp");
            t.connect(datosConexion.getPropiedad("usuario"), datosConexion.getPropiedad("password"));
            t.sendMessage(email, email.getAllRecipients());
            t.close();

        } catch (MessagingException e) {

            throw new MessagingException("Se produjo un error al enviar el email");

        }
    }
}
